{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING (theano.configdefaults): install mkl with `conda install mkl-service`: No module named 'mkl'\n",
      "/home/rosgori/Python/pymc3_env/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import BayesianNeuralNetwork as BNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "shape of X:  (1000, 1)\n"
     ]
    }
   ],
   "source": [
    "# 1. generate a simple non-linear function\n",
    "X = np.reshape(np.arange(-5.0, 5.0, 0.01), [-1, 1])\n",
    "\n",
    "print( \"shape of X: \", X.shape)\n",
    "\n",
    "Y = X ** 2.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10,6))\n",
    "plt.scatter(X, Y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Building neural network...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Only 200 samples in chain.\n",
      "Auto-assigning NUTS sampler...\n",
      "Initializing NUTS using jitter+adapt_diag...\n",
      "Multiprocess sampling (4 chains in 4 jobs)\n",
      "NUTS: [bias_out, out, layer1, bias1, layer0, bias0]\n",
      "Sampling 4 chains: 100%|██████████| 1600/1600 [03:35<00:00,  1.78draws/s]\n",
      "There were 6 divergences after tuning. Increase `target_accept` or reparameterize.\n",
      "The chain reached the maximum tree depth. Increase max_treedepth, increase target_accept or reparameterize.\n",
      "There were 34 divergences after tuning. Increase `target_accept` or reparameterize.\n",
      "The chain reached the maximum tree depth. Increase max_treedepth, increase target_accept or reparameterize.\n",
      "There were 8 divergences after tuning. Increase `target_accept` or reparameterize.\n",
      "The chain reached the maximum tree depth. Increase max_treedepth, increase target_accept or reparameterize.\n",
      "There were 3 divergences after tuning. Increase `target_accept` or reparameterize.\n",
      "The acceptance probability does not match the target. It is 0.9105053927103608, but should be close to 0.8. Try to increase the number of tuning steps.\n",
      "The chain reached the maximum tree depth. Increase max_treedepth, increase target_accept or reparameterize.\n",
      "The gelman-rubin statistic is larger than 1.4 for some parameters. The sampler did not converge.\n",
      "The estimated number of effective samples is smaller than 200 for some parameters.\n",
      "100%|██████████| 200/200 [00:05<00:00, 38.61it/s]\n",
      "100%|██████████| 200/200 [00:05<00:00, 39.39it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Root Mean Square deviation: 0.03177653034901077\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# 2. neural network\n",
    "print(\"Building neural network...\")\n",
    "\n",
    "nn = BNN.BayesianNeuralNetwork([5, 5], inference_method='mcmc')\n",
    "nn.fit(X, Y, samples=200)\n",
    "y_preds = nn.predict(X)\n",
    "RMSD = nn.RMSD(X, Y)\n",
    "\n",
    "print( \"Root Mean Square deviation:\", RMSD)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 6))\n",
    "plt.scatter(X, Y)\n",
    "plt.scatter(X, y_preds, alpha=0.1)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
